package br.com.sgc.entities.financeiro;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.sgc.entities.geral.Clinica;
import br.com.sgc.entities.produto.Fornecedor;

@Entity
@Table(name = "pedido_compra", schema = "financeiro")
public class PedidoCompra implements Serializable{
	
	private static final long serialVersionUID = 8099069820792080119L;

	@Id 
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ")
	@SequenceGenerator(schema = "financeiro", initialValue = 1, name = "SEQ", sequenceName = "financeiro.seq_pedido_compra", allocationSize = 1)
	private Long id;
	
	@Column(name = "valor_total_compra")
	private BigDecimal valorTotalCompra;
	
	@Column(name = "valor_desconto")
	private BigDecimal valorDesconto;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "fornecedor_id")
	private Fornecedor fornecedor = new Fornecedor();
	
	@Temporal(TemporalType.DATE)
	@Column(name = "data_compra")
	private Date dataCompra;
	
	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy="pedidoCompra")
	private List<ItemCompra> produtos = new ArrayList<ItemCompra>();
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "clinica_id")
	private Clinica clinica;
	
	@Column(name = "numero_pedido")
	private String numeroPedido;
	
	@Column(name = "index_numero_pedido")
	private Long indexNumeroPedido;
	
	private Boolean finalizado;
	
	private Boolean guardado;
	
	private Boolean cancelado;
	
	@Column(name = "atualizou_estoque")
	private Boolean atualizouEstoque;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public BigDecimal getValorTotalCompra() {
		return valorTotalCompra;
	}

	public void setValorTotalCompra(BigDecimal valorTotalCompra) {
		this.valorTotalCompra = valorTotalCompra;
	}

	public BigDecimal getValorDesconto() {
		return valorDesconto;
	}

	public void setValorDesconto(BigDecimal valorDesconto) {
		this.valorDesconto = valorDesconto;
	}

	public Fornecedor getFornecedor() {
		return fornecedor;
	}

	public void setFornecedor(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
	}

	public Date getDataCompra() {
		return dataCompra;
	}

	public void setDataCompra(Date dataCompra) {
		this.dataCompra = dataCompra;
	}

	public List<ItemCompra> getProdutos() {
		return produtos;
	}

	public void setProdutos(List<ItemCompra> produtos) {
		this.produtos = produtos;
	}

	public Clinica getClinica() {
		return clinica;
	}

	public void setClinica(Clinica clinica) {
		this.clinica = clinica;
	}

	public String getNumeroPedido() {
		return numeroPedido;
	}

	public void setNumeroPedido(String numeroPedido) {
		this.numeroPedido = numeroPedido;
	}

	public Long getIndexNumeroPedido() {
		return indexNumeroPedido;
	}

	public void setIndexNumeroPedido(Long indexNumeroPedido) {
		this.indexNumeroPedido = indexNumeroPedido;
	}

	public Boolean getFinalizado() {
		return finalizado;
	}

	public void setFinalizado(Boolean finalizado) {
		this.finalizado = finalizado;
	}

	public Boolean getGuardado() {
		return guardado;
	}

	public void setGuardado(Boolean guardado) {
		this.guardado = guardado;
	}

	public Boolean getCancelado() {
		return cancelado;
	}

	public void setCancelado(Boolean cancelado) {
		this.cancelado = cancelado;
	}

	public Boolean getAtualizouEstoque() {
		return atualizouEstoque;
	}

	public void setAtualizouEstoque(Boolean atualizouEstoque) {
		this.atualizouEstoque = atualizouEstoque;
	}
}
